﻿#region Usings

using System;
using System.Xml.XPath;
using Yandex.Market.Api.YmlSerialization;

#endregion

namespace Yandex.Market.Api.Model
{
    /// <summary>
    ///   Описание категории должно включать ее идентификатор (параметр id) для всех категорий и идентификатор категории более высокого уровня для подкатегорий.
    /// </summary>
    [YmlSerializeAs("category")]
    [Serializable]
    public class Category
    {
        /// <summary>
        ///   Идентификатор Вашей категории товаров<br />
        ///   Идентификатор категории должен быть уникальным положительным целым числом.<br /> 
        ///   Ни у одной категории параметр id не может быть равен "0".<br /> 
        ///   Обязательный элемент
        /// </summary>
        [YmlSerializeAs("id")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(0)]
        public uint ID { get; set; }

        /// <summary>
        ///   Идентификатор предыдущей по иерархии категории товаров<br /> 
        ///   Если элемент parentId не указан, то категория считается корневой.
        /// </summary>
        [YmlSerializeAs("parentId")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(10)]
        public uint? ParentID { get; set; }

        /// <summary>
        ///   Идентификатор категории Торг
        /// </summary>
        [YmlSerializeAs("tid")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(20)]
        public uint? Tid { get; set; }

        /// <summary>
        ///   Идентификатор категории Яндекс
        /// </summary>
        [YmlSerializeAs("yid")]
        [YmlAttributeForClass]
        [YmlAttributeOrder(30)]
        public uint? Yid { get; set; }

        /// <summary>
        ///   Название категории. Обязательный элемент
        /// </summary>
        [YmlValueForClass]
        public string Value { get; set; }

        internal static Category CreateCategoryFromXml(XPathNavigator nav)
        {
            Category category = new Category();
            category.Value = nav.Value;

            uint id;
            string strId = nav.GetAttribute("id", "");
            if(!string.IsNullOrEmpty(strId) && uint.TryParse(strId, out id))
                category.ID = id;

            strId = nav.GetAttribute("tid", "");
            if(!string.IsNullOrEmpty(strId) && uint.TryParse(strId, out id))
                category.Tid = id;

            strId = nav.GetAttribute("yid", "");
            if(!string.IsNullOrEmpty(strId) && uint.TryParse(strId, out id))
                category.Yid = id;

            return category;
        }
    }
}